package js;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class q高塔 {
    // 题意有问题，没通过
    static long res = 0;
    static List<Integer> path = new ArrayList<>();


    public static void main(String[] args) {
        //【输入格式】
        //输入的第一行包含两个整数n,m，用一个空格分隔。
        //第二行包含n个整数A;，相邻整数之间使用一个空格分隔，表示小蓝每回合的状态值。
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int m = scan.nextInt();

        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = scan.nextInt();
        }
        scan.close();

        backtrack(arr, n, m, 0);

        System.out.println(res % 998244353);
    }

    static void backtrack(int[] arr, int n, int m, int index) {
        // index标记回合

        if (m == 0) {
            res++;
            return;
        }
        if (index>=n) {
            res++;
            return;
        }


        for (int i = 1; i <= m; i++) {
           // path.add(i * arr[index]);
            backtrack(arr, n, m - i, index + 1);
          //  path.remove(path.size() - 1);
        }

    }
}
